package com.marvels.financial.loan.dao;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.github.pagehelper.Page;
import com.marvels.financial.loan.dto.LendPaymentConditionDTO;
import com.marvels.financial.loan.dto.LendPaymentPlanDTO;
import com.marvels.financial.loan.dto.McfeCustomerLoanContractDTO;
import com.marvels.financial.loan.dto.McfeCustomerRepaymentPlanDTO;
import com.marvels.financial.loan.dto.McfeLoanWithholdingDetailDTO;
import com.marvels.financial.loan.dto.PenaltyAdjustConditionDto;
import com.marvels.financial.loan.dto.PenaltyAdjustDto;
import com.marvels.financial.loan.dto.QueryPayPlanInfoDTO;
import com.marvels.financial.loan.dto.ReplacePaymentApplyInfo;
import com.marvels.financial.loan.dto.ReplacePaymentConditionDto;

public interface McfeCustomerRepaymentPlanDao {
	/**插入还款计划
	 * @author 娄凯琦
	 * @date 2018年5月14日  
	 * @param mcfeCustomerRepaymentPlanDTO
	 */
	public void insertRepaymentPlan(McfeCustomerRepaymentPlanDTO mcfeCustomerRepaymentPlanDTO);
	
	
	
	/**
	 * 查询代还款申请数据
	 * @param replacePaymentConditionDto
	 * @return
	 */
	public List<ReplacePaymentApplyInfo> selectReplacePaymentData(ReplacePaymentConditionDto replacePaymentConditionDto);
	
	
	/**根据贷款编号和状态查询还款计划
	 * @author 娄凯琦
	 * @date 2018年5月22日  
	 * @param loanId
	 * @return
	 */
	public List<McfeCustomerRepaymentPlanDTO> selectPlanByStatus(@Param("loanId")String loanId,@Param("status")String status);
	
	/**查询当期还款金额
	 * @author 娄凯琦
	 * @date 2018年5月22日  
	 * @param loanId
	 * @return
	 */
	public BigDecimal selectCurrentTenorMoney(String loanId);
	
	
	/**查询下期金额
	 * @author 娄凯琦
	 * @date 2018年5月22日  
	 * @param loanId
	 * @return
	 */
	public BigDecimal selectNextTenorMoney(String loanId);
	
	/**查询所有未完成还款计划
	 * @author 娄凯琦
	 * @date 2018年5月23日  
	 * @param loanId
	 * @return
	 */
	public List<McfeCustomerRepaymentPlanDTO> selectAllUncompletedPlan(String loanId);
	
	
	
	/**
	 * 根据loanid查询所有还款计划
	 * @param loanId
	 * @return
	 */
	public Page<McfeCustomerRepaymentPlanDTO> selectAllPlan(String loanId);
	
	
	/**根据主键id更新还款计划表
	 * @author 娄凯琦
	 * @date 2018年5月24日  
	 * @param mcfeCustomerRepaymentPlanDTO
	 */
	public void updateRepaymentPlanById(McfeCustomerRepaymentPlanDTO mcfeCustomerRepaymentPlanDTO);
	
	
	/**根据主键id更新还款计划表
	 * @author 娄凯琦
	 * @date 2018年5月24日  
	 * @param mcfeCustomerRepaymentPlanDTO
	 */
	public void updateRepaymentPlanById2(McfeCustomerRepaymentPlanDTO mcfeCustomerRepaymentPlanDTO);
	
	/**
	 * 通过loanId更新还款计划
	 * @param mcfeCustomerRepaymentPlanDTO
	 */
	public void updateRepaymentPlanByLoanId(McfeCustomerRepaymentPlanDTO mcfeCustomerRepaymentPlanDTO);
	
	/**查询所有正常的还款计划
	 * @author 娄凯琦
	 * @date 2018年5月25日  
	 * @param loanId
	 * @return
	 */
	public List<McfeCustomerRepaymentPlanDTO> selectAllNormalPlan(@Param("loanId") String loanId);
	
	
	/**根据主键id删除还款计划
	 * @author 娄凯琦
	 * @date 2018年5月25日  
	 * @param mcfeCustomerRepaymentPlanDTO
	 */
	public void deletePlanById(McfeCustomerRepaymentPlanDTO mcfeCustomerRepaymentPlanDTO);
	
	
	/**
	 * 查询能进行罚息调整的数据列表
	 * @param dto
	 * @return
	 */
	public Page<PenaltyAdjustDto> selectPenaltyAdjustmentList(PenaltyAdjustConditionDto dto);
	
	
	/**
	 * 更新还款计划减免数据
	 * @param planDTO
	 * @return
	 */
	public int updatePlanWaiveData(McfeCustomerRepaymentPlanDTO planDTO);
	
	
	/**
	 * 放贷还款信息-还款计划
	 * @param conditionDTO
	 * @return
	 */
	public  Page<LendPaymentPlanDTO> paymentPlanList(LendPaymentConditionDTO conditionDTO);
	
	
	/**
	 * 还款计划查询金额统计
	 * @param conditionDTO
	 * @return
	 */
	public  LendPaymentPlanDTO paymentPlanAmountStatic(LendPaymentConditionDTO conditionDTO);
	
	
	/**
	 * 根据loanId查询当期还款计划
	 * @return
	 */
	public McfeCustomerRepaymentPlanDTO selectByLoanId(@Param("loanId") String loanId);
	
	
	/**
	 * 查询当前期数(包含当前期)之前的未还费用
	 * @param loanContractDTO
	 * @return
	 */
	public McfeCustomerRepaymentPlanDTO selectCurrFee(McfeCustomerLoanContractDTO loanContractDTO);
	
	/**通过planCode查询还款计划
	 * @param planCode
	 * @return
	 */
	public McfeCustomerRepaymentPlanDTO selectPlanByPlanCode(String planCode);

	
	/**
	 * 插入逾期信息统计
	 * @param channelCodes
	 * @return
	 */
	public int insertOverdueStatic(@Param(value="channelCodes") List<String> channelCodes);
	
	
	
	/**
	 * 插入催收用户人工还款信息
	 * @param channelCodes
	 * @return
	 */
	public int  insertDebtorRepaymentInfo(@Param(value="channelCodes") List<String> channelCodes);
	/**
	 * 获取逾期客户信息
	 * @param paramMap
	 * @return
	 */
	public List<Map<String,Object>> selectOverdueCust(Map<String,Object> paramMap);
	
	
	/**通过plancoDE查询还款计划
	 * @param planCode
	 * @return
	 */
	public McfeCustomerRepaymentPlanDTO selectPlanByCode(String planCode);


	/**
	 * 根据loanid查询还款计划
	 * @param loanId
	 * @return
	 */
	public List<QueryPayPlanInfoDTO> selectQueryPayPlanInfoList(String loanId);
	
	/**更新还款计划咨询费
	 * @author 娄凯琦
	 * @date 2018年10月16日  
	 * @param mcfeLoanWithholdingDetailDTO
	 */
	public void updateConsultFee(McfeLoanWithholdingDetailDTO mcfeLoanWithholdingDetailDTO);
	
	/**
	 * 根据loanId查询小于当前日期的还款计划
	 * @param loanId
	 * @return
	 */
	public List<McfeCustomerRepaymentPlanDTO> selectLessTodayPlan(String loanId); 
	
	/**
	 * 通过申请单号查询应还款金额，应还款金额=((应还款本金/7)+(应还款管理费/7))*第几日-已还款本金-已还款管理费+应还违约金+应还滞纳金-已还违约金-已还滞纳金
	 * @param custCardNo
	 * @return
	 */
	public BigDecimal newSelectCurrentTenorMoney(String loanId);
}
